//
//  EWxChatMgrGroupDelegate.h
//  WXIMSDK
//  群组添加好友,删除好友,接收到好友请求、创建群、删除群等的回调协议
//  Created by vince on 14-9-5.
//  Copyright (c) 2014年 网信金融集团. All rights reserved.
//


#import <Foundation/Foundation.h>


@class ChatGroup;


//返回状态定义
typedef enum {
    Group_Success,
    Group_Failure,
    Group_NotLogin,
    
    Group_GroupIdIsNull,
    Group_GroupIdNotExist,
    
    Group_GroupNameIsNull,
    Group_GroupNameMaxLenError,
    
    Group_GroupDescIsNull,
    Group_GroupDescMaxLenError,
    
    Group_GroupMemberMaxError,
    
    Group_GroupNickNameIsNull,
    
    Group_GroupMemberIdIsNull,
    Group_GroupAdimIdIsNull,
 
}GroupState;


@protocol EWxChatMgrGroupDelegate <NSObject>

@optional


/*!
 @method
 @brief         创建一个群组后的回调
 @param GroupId 所创建的群组Id
 @param state   是GroupState的枚举值
 @param eMsg    eMsg附带必要说明消息
 */
- (void)creatGroupNameRspState:(GroupState)state groupId:(NSString *)GroupId withMsg:(NSString *)eMsg;


/*!
 @method
 @brief          群组信息更新后的回调
 @param state    返回GroupState枚举值
 @param obj      更新后的新群组信息
 @param errorMsg 附带错误信息
 @discussion
 */
- (void)updateGroupIdRspState:(GroupState)state chatGroup:(ChatGroup*)obj error:(NSString *)errorMsg;


/*!
 @method
 @brief        删除群组回调
 @param        groupId 被删除的群组id
 @param        state  返回GroupState枚举值
 @discussion
 */
- (void)deleteGroupIdRspState:(GroupState)state groupId:(NSString *)groupId;


/*!
 @method
 @brief      邀请好友加入群组状态回调
 @param      groupid 要增加成员的群组id
 @param      state  返回GroupState枚举值
 @discussion
 */
- (void)inviteGroupMemberRspState:(GroupState)state groupId:(NSString *)groupId error:(NSString *)errorMsg;


/*!
 @method
 @brief      群组删除成员通知
 @param      groupid 要删除成员的群组id
 @param      state  返回GroupState枚举值
 @param      errorMsg  错误描述
 @discussion
 */
- (void)kickoffGroupMemberRspState:(GroupState)state groupId:(NSString *)groupId errorMsg:(NSString *)errorMsg;


/*!
 @method
 @brief     请求加入群组
 @param     groupId  群组Id
 @param     errorMsg  返回信息
 @discussion
 */
- (void)requestJoinGroupIdRspState:(GroupState)state groupId:(NSString *)groupId errorMsg:(NSString *)errorMsg;


/*!
 @method
 @brief         修改自己在某群组中的昵称的回调
 @param         groupId   群组对象Id
 @param         state  返回GroupState枚举值
 @discussion    只针对当前登录用户有效
 */
- (void)setGroupNicknameRspState:(GroupState)state inGroupId:(NSString *)groupId;

/*!
 @method
 @brief          主动退出某群组的回调
 @param          groupId   所要离开的群组对象Id
 @param          state  返回GroupState枚举值
 @discussion     只针对当前登录用户有效
 */
- (void)quitGroupIdRspState:(GroupState)state groupId:(NSString *)groupId;


/*!
 @method
 @brief      主动接收加入某群组的回调
 @param      memberId 申请加入群的准成员Id
 @param      groupId  群组Id
 @param      state  返回GroupState枚举值
 */
- (void)acceptGroupMemberIdRspState:(GroupState)state memberId:(NSString *)memberId joinGroupId:(NSString *)groupId;


/*!
 @method
 @brief      主动拒绝加入某群组的回调
 @param      groupId  群组ID
 @param      memberId 拒绝的人的id
 @param      state  返回GroupState枚举值
 */
- (void)rejectGroupMemberIdRspState:(GroupState)state memberId:(NSString *)memberId joinGroupId:(NSString *)groupId;


/*!
 @method
 @brief      群组权限改变
 @param      groupid 被移交管理权限的群组id
 @param      state  返回GroupState枚举值
 @discussion
 */
- (void)abdicateAdmininstrationGroupIdRspState:(GroupState)state groupId:(NSString *)groupId;








/*!
 @method
 - @brief 邀请好友加入群组状态回调
 - @param groupid 要增加成员的群组id
 - @param state  YES--成功  NO--失败
 + @brief   邀请好友加入群组状态回调
 + @param   groupid 要增加成员的群组id
 + @param   state  返回GroupState枚举值
 @discussion
 */
- (void)didGroupMemberAdded:(NSString *)groupId state:(BOOL)state;



/*!
 @method
 @brief 群组成员名称更新通知
 @param groupid 要修改成员的所在群组id
 @param contactId 要修改的成员id
 @param nickName 已修改的新名称
 @discussion
 */
- (void)onGroupMemberNickNameUpdated:(NSString *)groupId
                           contactId:(NSString *)contactId
                         withNicName:(NSString *)nickName;

/*!
 @method
 @brief 群组成员状态改变通知
 @param groupid 所在的群组id
 @param contactId 改变状态的成员id
 @param state 具体的状态
 @discussion
 */
- (void)onGroupMemberStatusChanged:(NSString *)groupId
                         contactId:(NSString *)contactId
                             state:(NSInteger)status;


/*!
 @method
 @brief 收到了其它群组的加入邀请
 @param groupId  群组ID
 @param contactId 邀请人Id
 @param message  邀请信息
 @discussion
 */
- (void)didReceiveGroupInvitationFrom:(NSString *)groupId
                              inviter:(NSString *)contactId
                              message:(NSString *)message;


/*!
 @method
 @brief 申请加入群组, 但被别人接收后的回调
 @param groupId  群组ID
 @param contactId 接收的人的id
 @param message   接收信息
 @discussion
 */
- (void)onGroupInviteDecelined:(NSString *)groupId contact:(NSString *)contactId message:(NSString *)message;


/*!
 @method
 @brief           被别人请出, 和销毁群组后的回调
 @param groupId   所要离开的群组对象Id
 @param contactId 离开的成员Id
 @param state     YES--成功   NO--失败
 @discussion
        离开的原因包含 被别人请出, 和销毁群组三种情况
 */
- (void)didLeaveGroupId:(NSString *)groupId contactId:(NSString*)contactId state:(BOOL)state;


@end
